import { Injectable } from '@nestjs/common';
import * as Sequelize from 'sequelize'; // 引入 Sequelize 库
import sequelize from '../../database/sequelize'; // 引入 Sequelize 实例

import { encryptPassword, makeSalt } from 'src/utils/cryptogram'; //引入加密函数

@Injectable()
export class UserService {
  // 查询用户是否存在
  async findOne(phone: string): Promise<any | undefined> {
    const sql = `SELECT * FROM user WHERE phone = ${phone}`; // 一段平淡无奇的 SQL 查询语句
    try {
      const res = await sequelize.query(sql, {
        type: Sequelize.QueryTypes.SELECT, // 查询方式
        raw: true, // 是否使用数组组装的方式展示结果
        logging: true, // 是否将 SQL 语句打印到控制台，默认为 true
      });
      const user = res[0]; // 查出来的结果是一个数组，我们只取第一个。
      return user; // 查到就返回，没查到就返回undefined
      //   if(user){
      //     return {
      //         code:1,
      //         data:{
      //             user
      //         },
      //         msg:'查询成功'
      //     }
      //   }else{
      //     return {
      //         code:0,
      //         msg:'用户不存在'
      //     }
      //   }
    } catch (error) {
      return {
        code: 503,
        msg: `服务器错误: ${error}`,
      };
    }
  }

  //   注册
  async register(reqBody: any): Promise<any> {
    const { name, phone, pwd } = reqBody;
    // throw '错误了';
    const user = await this.findOne(phone);
    if (user) {
      return {
        code: 0,
        msg: '用户已存在',
      };
    }
    const salt = makeSalt(); //制作密码盐
    const hashPwd = encryptPassword(pwd, salt); //加密
    const regSql = `INSERT INTO user (name,phone,pwd,pwd_salt) VALUES ('${name}','${phone}','${hashPwd}','${salt}')`;
    try {
      await sequelize.query(regSql, { logging: false });
      return {
        code: 1,
        msg: '注册成功',
      };
    } catch (error) {
      return {
        code: 503,
        msg: `服务器错误: ${error}`,
      };
    }
  }
}
